package ve.usb.coord.colision;

import java.util.Date;
import java.util.List;
import java.util.ListIterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

import org.hibernate.Hibernate;
import ve.usb.cohesion.runtime.CohesionAction;

import org.hibernate.Session;
import org.hibernate.Transaction;
import ve.usb.coord.colision.hibernate.*;


/**
 * Manejo de elementos de la entidad Modalidad.<br>
 */
public class AccionesNegociacion extends CohesionAction {
    
    
/**
     * Acción llamada por Struts para ejecutar la acción A_PreConfirmarOferta.
     * Busca las ofertas que la coordinaci'on quiere consultar con el departamento.<br>
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_PreConfirmarOferta(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        //Salidas
        final String SALIDA_0 = "V_PreConfirmarOferta";

        String salida = SALIDA_0;
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            //FConfOferta fFConfOferta = (FConfOferta)form;
            String crit = request.getSession().getAttribute("idDepartamento").toString();
            if(Integer.parseInt(request.getSession().getAttribute("tipoUsuario").toString()) != 0){
                if (crit==null) crit = " where departamento = "+request.getParameter("idDepartamento");
                else crit = " where departamento = "+crit;
            }else{
                if (crit==null) crit = "";
                else crit = " where departamento = "+crit;
                
            }
            
            HttpSession sess = request.getSession();
            FConfOferta fFConfOferta = (FConfOferta)sess.getAttribute("FConfOferta");
                if (fFConfOferta==null) {
                    fFConfOferta = new FConfOferta();
                    sess.setAttribute("FConfOferta", fFConfOferta);
                    }else {
                        fFConfOferta.reset(mapping, request);
                        }
            /*
            {java.util.List<ve.usb.cohesion.runtime.OfertaConf> listC = 
               (java.util.List<ve.usb.cohesion.runtime.OfertaConf>)s.createQuery(
               "select new ve.usb.cohesion.runtime.OfertaConf(oferta, aprobado, comentario) " + 
               "from OfertaEnviada where departamento="+idDepartamento).list();
             fFConfOferta.setL_OfertaConf(listC);
            }
            */
            
            List<OfertaEnviada> listO = (java.util.List<OfertaEnviada>)s.createQuery("from OfertaEnviada"+crit).list();
            request.setAttribute("L_OfertaConfI", listO);
            fFConfOferta.setL_OfertaConfI(listO);
            
           
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getPeriodo()!=null) ofertaEnviada.getOferta().getPeriodo().getNombre();
            }
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getPlanDeEstudios()!=null) ofertaEnviada.getOferta().getPlanDeEstudios().getCoordinacion();
            }
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getRequisito()!=null) ofertaEnviada.getOferta().getRequisito().getAsignatura().getCodigo();
            }
            
            
           
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            ex.printStackTrace();
            throw ex;
        }
        return mapping.findForward(salida);
    }
    
                        
            
/**
     * Acción llamada por Struts para ejecutar la acción A_ConfirmarOferta.
     * Asienta confirmaciones y comentarios del departamento.<br>
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @return The Struts name of the following step.
     * @throws java.lang.Exception For untreated exceptions. 
     * These exceptios will normally be treated with 
     * the default exception action.
     */
    public ActionForward A_ConfirmarOferta(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        //Salidas
        final String SALIDA_0 = "A_PreConfirmarOferta";

        String salida = SALIDA_0;
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            FConfOferta fFConfOferta = (FConfOferta)form;
            List<OfertaEnviada> listO = fFConfOferta.getL_OfertaConfI();
            ListIterator listOI =listO.listIterator();
            int i = 0;
            while(listOI.hasNext()) {
                OfertaEnviada tmp = (OfertaEnviada)listOI.next();
                OfertaEnviada ofertaE = (OfertaEnviada)s.load(OfertaEnviada.class, new Long(tmp.getIdOfertaEnviada()));
                ofertaE.setAprobado(Byte.parseByte((String)request.getParameter("L_OfertaConfI[" + (i) + "].aprobado")));
                ofertaE.setComentario((String)request.getParameter("L_OfertaConfI[" + (i++) + "].comentario"));
                s.saveOrUpdate(ofertaE);
                s.flush();
            }
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        }
        return mapping.findForward(salida);
    }

    
    public ActionForward A_PreConfirmarOfertaC(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        //Salidas
        final String SALIDA_0 = "V_PreConfirmarOfertaC";

        String salida = SALIDA_0;
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            //FConfOferta fFConfOferta = (FConfOferta)form;
            String crit = request.getSession().getAttribute("idCoordinacionC").toString();
            if(Integer.parseInt(request.getSession().getAttribute("tipoUsuario").toString()) != 0){
                if (crit==null) crit = " where coordinacion = "+request.getParameter("idCoordinacionC");
                else crit = " where coordinacion = "+crit;
            }else{
                if (crit==null) crit = "";
                else crit = " where coordinacion = "+crit;
                
            }
            
            HttpSession sess = request.getSession();
            FConfOferta fFConfOferta = (FConfOferta)sess.getAttribute("FConfOferta");
                if (fFConfOferta==null) {
                    fFConfOferta = new FConfOferta();
                    sess.setAttribute("FConfOferta", fFConfOferta);
                    }else {
                        fFConfOferta.reset(mapping, request);
                        }
            /*
            {java.util.List<ve.usb.cohesion.runtime.OfertaConf> listC = 
               (java.util.List<ve.usb.cohesion.runtime.OfertaConf>)s.createQuery(
               "select new ve.usb.cohesion.runtime.OfertaConf(oferta, aprobado, comentario) " + 
               "from OfertaEnviada where departamento="+idDepartamento).list();
             fFConfOferta.setL_OfertaConf(listC);
            }
            */
            
            List<OfertaEnviada> listO = (java.util.List<OfertaEnviada>)s.createQuery("from OfertaEnviada"+crit).list();
            request.setAttribute("L_OfertaConfI", listO);
            fFConfOferta.setL_OfertaConfI(listO);
            
           
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getPeriodo()!=null) ofertaEnviada.getOferta().getPeriodo().getNombre();
            }
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getPlanDeEstudios()!=null) ofertaEnviada.getOferta().getPlanDeEstudios().getCoordinacion();
            }
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getOferta().getRequisito()!=null) ofertaEnviada.getOferta().getRequisito().getAsignatura().getCodigo();
            }
            for (OfertaEnviada ofertaEnviada:listO) {
                if (ofertaEnviada.getDepartamento()!=null) ofertaEnviada.getDepartamento().getNombre();
            }
            
           
            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            ex.printStackTrace();
            throw ex;
        }
        return mapping.findForward(salida);
    }
    

	
    
public ActionForward A_ConfirmarOfertaI(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
    //Salidas
        final String SALIDA_0 = "V_ConfirmarOferta";

        String salida = SALIDA_0;        
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {

            String id = request.getParameter("idOfertaEnviada");
            Long idOfertaEnviada = (id==null) ? 
                (Long)request.getSession().getAttribute("idOfertaEnviada") :
                new Long(id);
            
            OfertaEnviada ofertaEnviada = (OfertaEnviada)s.load(OfertaEnviada.class, idOfertaEnviada);;
            request.setAttribute("aprobado", ofertaEnviada.getAprobado());       
            request.setAttribute("comentario", ofertaEnviada.getComentario());
            
            HttpSession sess = request.getSession();
            FConfOferta fFConfOferta = (FConfOferta)sess.getAttribute("FConfOferta");
            if (fFConfOferta==null) {
                fFConfOferta = new FConfOferta();
                sess.setAttribute("FConfOferta", fFConfOferta);
            } else {
                fFConfOferta.reset(mapping, request);
            }
            
            fFConfOferta.setIdOfertaEnviada(ofertaEnviada.getIdOfertaEnviada());
            if (ofertaEnviada.getOferta().getPeriodo()!=null) {
                fFConfOferta.setPeriodo(ofertaEnviada.getOferta().getPeriodo().getIdPeriodo());
            } else {
                fFConfOferta.setPeriodo(0);
            }
            if (ofertaEnviada.getOferta().getPlanDeEstudios()!=null) {
                fFConfOferta.setPlanDeEstudios(ofertaEnviada.getOferta().getPlanDeEstudios().getIdPlan());
            } else {
                fFConfOferta.setPlanDeEstudios(0);
            }
            if (ofertaEnviada.getOferta().getRequisito()!=null) {
                fFConfOferta.setRequisito(ofertaEnviada.getOferta().getRequisito().getIdRequisito());
            } else {
                fFConfOferta.setRequisito(0);
            }
            fFConfOferta.setAprobado(ofertaEnviada.getAprobado());
            fFConfOferta.setComentario(ofertaEnviada.getComentario());
            
            Hibernate.initialize(ofertaEnviada.getOferta().getHorario());
            
            for(Horario horario:ofertaEnviada.getOferta().getHorario()){
               
            }
            
            //Feed for combo listRequisitos.
            java.util.List ofertas = s.createQuery("from Horario where oferta = " + ofertaEnviada.getOferta().getIdOferta() + " order by tipoHora DESC,dia,hora").list();
            request.setAttribute("L_Horario", ofertas);
            
            Hibernate.initialize(ofertaEnviada.getOferta().getRequisito().getAsignatura());
            request.setAttribute("D_Asignatura", ofertaEnviada.getOferta().getRequisito().getAsignatura());
            
            request.getSession().setAttribute("idOfertaEnviada", idOfertaEnviada);

            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        }
        return mapping.findForward(salida);
    }

/*
public ActionForward A_ConfirmarOferta(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        //Salidas
        final String SALIDA_0 = "A_PreConfirmarOferta";

        String salida = SALIDA_0;        
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction tr = s.beginTransaction();
        try {
            FConfOferta fFConfOferta = (FConfOferta)form;

            OfertaEnviada ofertaEnviada = (OfertaEnviada)s.load(OfertaEnviada.class, new Long(fFConfOferta.getIdOfertaEnviada()));
            

            ofertaEnviada.setAprobado(fFConfOferta.getAprobado());
            ofertaEnviada.setComentario(fFConfOferta.getComentario());
            Date fecha = new Date();
            ofertaEnviada.setFechaRevision(fecha);
            s.saveOrUpdate(ofertaEnviada);
            s.flush();
            request.getSession().setAttribute("idOfertaEnviada", ofertaEnviada.getIdOfertaEnviada());

            tr.commit();

        } catch (Exception ex) {
            tr.rollback();
            throw ex;
        }
        return mapping.findForward(salida);
    }

*/
}